﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 23/04/2014
 * Time: 07:25 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;
using System.Collections.Generic;
using Gestión_UTN.factories;

namespace Gestión_UTN.blimpl
{
	/// <summary>
	/// Description of aprobadablimpl.
	/// </summary>
	public class aprobadablimpl:bl.aprobadabl
	{
		private static da.aprobadada createAprobada = dafactory.createAprobada();
		private static bl.alumnobl createAlumno = blfactory.createAlumno();
		private static bl.materiabl createMateria = blfactory.createMateria();
		private static bl.cursadabl createCursada = blfactory.createCursada();
		
		public aprobadablimpl()
		{
		}
		
		public bool SaveAprobada(Gestión_UTN.bo.Aprobadabo apr)
		{
			bool ingresada = false;
			
			try 
			{
				ingresada = (null != apr)
					? createAprobada.SaveAprobada(apr.Alumno.Dni,apr.Materia.Id,
					                                    apr.Cursada.Id,apr.Fecha)
					: false;
			} 
			catch (Exception) 
			{
				
				ingresada = false;
			}
			
			return ingresada;
		}
		
		public bool DeleteAprobada(Gestión_UTN.bo.Aprobadabo apr)
		{
			bool eliminada = false;
			
			try 
			{
				eliminada = (null != apr)
					? createAprobada.DeleteAprobada(apr.Alumno.Dni,
					                                      apr.Materia.Id,apr.Fecha)
					: false;
				
			} catch (Exception) {
				
				eliminada = false;
			}
			
			return eliminada;
		}
		
		public bool ModifyAprobada(Gestión_UTN.bo.Aprobadabo apr, Gestión_UTN.bo.Aprobadabo apr_anterior)
		{
			bool modificada = false;
			
			try 
			{
				modificada = (null != apr && null != apr_anterior)
					? createAprobada.ModifyAprobada(apr_anterior.Alumno.Dni, apr_anterior.Materia.Id,
					                                      apr_anterior.Fecha,apr.Alumno.Dni,apr.Materia.Id,
					                                      apr.Cursada.Id,apr.Fecha)
					:false;
			} 
			catch (Exception) 
			{
				
				modificada = false;
			}
			
			return modificada;
		}
		
		public System.Data.DataTable FindAllAprobadas()
		{
			DataTable tablaAprobadas = null;
			
			try 
			{
				tablaAprobadas = createAprobada.FindAllAprobadas();
			}
			catch (Exception) 
			{
				tablaAprobadas = null;
			}
			
			return tablaAprobadas;
		}
		
		public System.Collections.Generic.List<Gestión_UTN.bo.Aprobadabo> FindAprobadaByDni(int alu_dni)
		{
			List<bo.Aprobadabo> aprobadas = null;
			
			try 
			{
				List<Entities.Aprobada> aprs = (0 != alu_dni)
					? createAprobada.FindAprobadaByDni(alu_dni)
					: null;
				
				if (null != aprs) 
				{
					aprobadas = new List<bo.Aprobadabo>();
					
					foreach (var a in aprs) 
					{
						bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(a.Alu_dni);
						bo.Materiabo mat = createMateria.FindMateriaByMatId(a.Mat_id);
						bo.Cursadabo cur = createCursada.FindCursadasById(a.Cur_id);
						
						bo.Aprobadabo apr = new bo.Aprobadabo(alu,mat,cur,a.Fecha);
						
						aprobadas.Add(apr);
						
						apr = null;
					}
				}
			} 
			catch (Exception)
			{
				aprobadas = null;
			}
			
			return aprobadas;
		}
		
		public System.Collections.Generic.List<Gestión_UTN.bo.Aprobadabo> FindAprobadaByMateria(int mat_id, int cur_id)
		{
			List<bo.Aprobadabo> aprobadas = null;
			
			try 
			{
				List<Entities.Aprobada> aprs = (0 != mat_id && 0 != cur_id)
					? createAprobada.FindAprobadaByMateria(mat_id,cur_id)
					: null;
				
				if (null != aprs) 
				{
					aprobadas = new List<bo.Aprobadabo>();
					
					foreach (var a in aprs) 
					{
						bo.Alumnobo alu = createAlumno.FindAlumnoByDNI(a.Alu_dni);
						bo.Materiabo mat = createMateria.FindMateriaByMatId(a.Mat_id);
						bo.Cursadabo cur = createCursada.FindCursadasById(a.Cur_id);
						
						bo.Aprobadabo apr = new bo.Aprobadabo(alu,mat,cur,a.Fecha);
						
						aprobadas.Add(apr);
						
						apr = null;
					}
				}
			} 
			catch (Exception)
			{
				aprobadas = null;
			}
			
			return aprobadas;
		}
	}
}
